package com.azoft.carousellayoutmanager.sample;
import android.databinding.DataBindingUtil;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.azoft.carousellayoutmanager.CarouselLayoutManager;
import com.azoft.carousellayoutmanager.CarouselZoomPostLayoutListener;
import com.azoft.carousellayoutmanager.CenterScrollListener;
import com.azoft.carousellayoutmanager.DefaultChildSelectionListener;
import com.azoft.carousellayoutmanager.sample.databinding.ActivityCarouselPreviewBinding;
import com.azoft.carousellayoutmanager.sample.databinding.ItemViewBinding;
import java.util.Locale;
import java.util.Random;
public class CarouselPreviewActivity extends AppCompatActivity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ActivityCarouselPreviewBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_carousel_preview);
setSupportActionBar(binding.toolbar);
final TestAdapter adapter = new TestAdapter();
// create layout manager with needed params: vertical, cycle
initRecyclerView(binding.listHorizontal, new CarouselLayoutManager(CarouselLayoutManager.HORIZONTAL, false), adapter);
initRecyclerView(binding.listVertical, new CarouselLayoutManager(CarouselLayoutManager.VERTICAL, true), adapter);
// fab button will add element to the end of the list
binding.fabScroll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
/*
final int itemToRemove = adapter.mItemsCount;
if (10 != itemToRemove) {
adapter.mItemsCount++;
adapter.notifyItemInserted(itemToRemove);
}
*/
binding.listHorizontal.smoothScrollToPosition(adapter.getItemCount() - 2);
binding.listVertical.smoothScrollToPosition(adapter.getItemCount() - 2);
}
});
// fab button will remove element from the end of the list
binding.fabChangeData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
/*
final int itemToRemove = adapter.mItemsCount - 1;
if (0 <= itemToRemove) {
adapter.mItemsCount--;
adapter.notifyItemRemoved(itemToRemove);
}
*/
binding.listHorizontal.smoothScrollToPosition(1);
binding.listVertical.smoothScrollToPosition(1);
}
});
}
private void initRecyclerView(final RecyclerView recyclerView, final CarouselLayoutManager layoutManager, final TestAdapter adapter) {
// enable zoom effect. this line can be customized
layoutManager.setPostLayoutListener(new CarouselZoomPostLayoutListener());
layoutManager.setMaxVisibleItems(2);
recyclerView.setLayoutManager(layoutManager);
// we expect only fixed sized item for now
recyclerView.setHasFixedSize(true);
// sample adapter with random data
recyclerView.setAdapter(adapter);
// enable center post scrolling
recyclerView.addOnScrollListener(new CenterScrollListener());
// enable center post touching on item and item click listener
DefaultChildSelectionListener.initCenterItemListener(new DefaultChildSelectionListener.OnCenterItemClickListener() {
@Override
public void onCenterItemClicked(@NonNull final RecyclerView recyclerView, @NonNull final CarouselLayoutManager carouselLayoutManager, @NonNull final View v) {
final int position = recyclerView.getChildLayoutPosition(v);
final String msg = String.format(Locale.US, "Item %1$d was clicked", position);
Toast.makeText(CarouselPreviewActivity.this, msg, Toast.LENGTH_SHORT).show();
}
}, recyclerView, layoutManager);
layoutManager.addOnItemSelectionListener(new CarouselLayoutManager.OnCenterItemSelectionListener() {
@Override
public void onCenterItemChanged(final int adapterPosition) {
if (CarouselLayoutManager.INVALID_POSITION != adapterPosition) {
final int value = adapter.mPosition[adapterPosition];
/*
adapter.mPosition[adapterPosition] = (value % 10) + (value / 10 + 1) * 10;
adapter.notifyItemChanged(adapterPosition);
*/
}
}
});
}
private static final class TestAdapter extends RecyclerView.Adapter<TestViewHolder> {
@SuppressWarnings("UnsecureRandomNumberGeneration")
private final Random mRandom = new Random();
private final int[] mColors;
private final int[] mPosition;
private int mItemsCount = 10;
TestAdapter() {
mColors = new int[mItemsCount];
mPosition = new int[mItemsCount];
for (int i = 0; mItemsCount > i; ++i) {
//noinspection MagicNumber
mColors[i] = Color.argb(255, mRandom.nextInt(256), mRandom.nextInt(256), mRandom.nextInt(256));
mPosition[i] = i;
}
}
@Override
public TestViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
return new TestViewHolder(ItemViewBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
}
@Override
public void onBindViewHolder(final TestViewHolder holder, final int position) {
holder.mItemViewBinding.cItem1.setText(String.valueOf(mPosition[position]));
holder.mItemViewBinding.cItem2.setText(String.valueOf(mPosition[position]));
holder.itemView.setBackgroundColor(mColors[position]);
}
@Override
public int getItemCount() {
return mItemsCount;
}
}
private static class TestViewHolder extends RecyclerView.ViewHolder {
private final ItemViewBinding mItemViewBinding;
TestViewHolder(final ItemViewBinding itemViewBinding) {
super(itemViewBinding.getRoot());
mItemViewBinding = itemViewBinding;
}
}
}